package com.jt.Service;

import com.alibaba.dubbo.config.annotation.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import com.jt.service.DubboUserService;
import com.jt.unit.ObjectMapperUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import redis.clients.jedis.JedisCluster;

import java.util.UUID;

@Service
public class DubboUserServiceImpl implements DubboUserService {
    @Autowired
    private UserMapper userMapper;

    @Autowired
    private JedisCluster jedisCluster;

    @Override
    public void saveUser(User user) {
        String md5Password = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
        user.setPassword(md5Password).setEmail(user.getPhone());
        userMapper.insert(user);
    }

    /**
     * 校验用户信息是否有效 并执行单点登录操作
     * 1.校验用户名和密码是否正确（密码明文转化为密文）
     * 2.检查数据库是否有结果
     * 3.如果有结果则动态生成ticket信息（uuid),将user对象转化为json
     * 4.将数据保存到redis中并且设定超时时间
     * 5.返回当前用户登录的密钥
     * @param user
     * @return
     */
    @Override
    public String doLogin(User user) {
        String md5password = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
        QueryWrapper<User>queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username",user.getUsername()).eq("password",md5password);
        //获取用户的全部数据  包含涉密信息
        User userDB = userMapper.selectOne(queryWrapper);
        if(userDB==null){
            //用户名密码错误
            return null;
        }else {
            String ticket = UUID.randomUUID().toString().replace("-","");

            //脱敏处理 余额 密码 手机号 家庭地址 物流地址
            userDB.setPassword("asdadassfff你信不信"); //这里只更改了内存中的数据 数据库中的数据不受影响
            String userJSON = ObjectMapperUtil.toJson(userDB);
            //操作时保证原子性
            jedisCluster.setex(ticket,7*24*60*60,userJSON);
            return ticket;
        }

    }
}
